package com.sh.rpc.proxy;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;


// 本类没有目标对象，返回给调用端一个虚拟对象
@Slf4j
public class MockServiceProxy  implements InvocationHandler  {

    /**
     * 调用代理
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 获取方法返回值类型
        Class<?> methodReturnType = method.getReturnType();
        log.info("mock 激活：{}",method.getName());
        return getDefalutObject(methodReturnType);
    }

    /**
     * 生成指定类型的默认值对象
     * @param type
     * @return
     */
    private Object getDefalutObject(Class<?> type) {
        // 基本类型
        if (type.isPrimitive()){
            if( type==boolean.class){
                return false;
            } else if (type == short.class) {
                return (short) 0;
            }else  if ( type==int.class){
                return 0;
            }else if ( type == long.class ){
                return 0L;
            }else if ( type == float.class ){
                return 0.0f;
            }else if ( type == double.class ){
                return 0.0d;
            }
        }

        // 对象类型
        return null;

    }
}
